/*对uploadHelper进行面向对象的重写
*注意：1、对于Dom的操作，一定要等到该对象被加载到dom中以后才能执行
*     2、在使用this的时候，一定要确认当前的this是指的哪个对象
*	  3、在给div设置滚动条时，要指定其高度才会起作用
*/
UploadHelper = function(config){
	this.path = config.path == null ? '/DreamMaker' : config.path;
	this.title = config.title == null ? '文件上传' : config.title;
	this.addLine = config.addLine;//是否显示"添加一行"
	this.addSave = config.save;//是否显示"保存"
	this.addSaveAndReturn = config.saveAndReturn == null ? true : config.saveAndReturn;//是否显示"保存并返回"
	this.addViewServer = config.viewServer==null?true:config.viewServer;//是否显示"从服务器选择"
	this.type = config.type ==null?'logo' : config.type;//设置上传文件的类型
	this.url = config.url == null ? this.path+'/system/ajaxFileUpload/ajaxUpload.action?type='+this.type : this.path+config.url+'?type='+this.type;//ajax进行提交的action，需要包含"/"
	this.fieldId = config.fieldId == null ? 'logo' : config.fieldId;//返回文件名的填充位置,默认为logo
	this.viewUrl = config.viewUrl == null? this.path+'/system/ajaxFileUpload/ajaxViewServer.action?type='+this.type:this.path+config.viewUrl+'?type='+this.type;
	this.init();
}
//创建UploadHelper的相关方法
UploadHelper.prototype = {
	//初始化
	init : function () {
		//如果已经被初始化过，则将原来的删除，重新进行初始化
		if($("#fileUploadDiv").attr("id")!=null){
			$("#fileUploadDiv").remove();
		}
		var uploadHelper = this;
		
		var div = '<div id="fileUploadDiv">';
			div += '<div id="head"><span class="title">'+this.title+'</span></div>';
			div += '<div id="toolBar"></div>';
			div += '<div id="uploadContent"></div>';
			div += '</div>';
		//将div添加到body中
		$(div).appendTo('body');
		var closeBar = '<dl class="closeBar"><dt class="close" id="closer" style="cursor:hand;"></dt></dl>';
		$(closeBar).appendTo("#head");
		$("#closer").click( function () {
		//点击按钮时将该DIV从dom中删除
		$("#fileUploadDiv").remove(); 
		}); 
		
		//默认创建一个上传框
		var fileTable = '<table class="fileTable" id="fileTable">';
			fileTable += '<tr id="file_0" class="tableData formData">';
			fileTable += '<td><input type="file" class="text" name="upload" id="upload_0"></td>';
			fileTable += '<td><img src="'+this.path+'/images/system/gtk-del.png" id="img_0" style="cursor:hand;"/></td>';
			fileTable += '</tr>';
		$(fileTable).appendTo('#uploadContent');
		$("#img_0").click(function(){
			uploadHelper.delRecord(0);
		}); 
		//将该上传DIV显示到页面的中间
		var left = ($(document.body).width())/2-250;
		var top = ($(document.body).height())/2-200;
		$("#fileUploadDiv").css({'top':top+'px','left':left+'px'});
		//设置工具栏按钮
		if(this.addLine){
			this.addLineBar();
		  }
		if(this.addSave){
			this.addSaveBar(this.url);
		  }
		if(this.addSaveAndReturn){
			this.addSaveAndReturnBar(this.fieldId,this.url);
		  }
		 if(this.addViewServer){
		 	this.ajaxViewServer(this.fieldId,this.viewUrl);
		 }
	},
	addLineBar : function() {
		var uploadHelper = this;
		//在工具栏添加一个”添加一行“图标，在用户点击该按钮的时候会在系统界面添加一个文件选择框
			var add = '<dl id="add" style="cursor:hand;"><dt class="add"></dt><dd>添加一行</dd></dl>';
			$(add).appendTo('#toolBar');
			$("#add").click(function (){
				//每点击一下，就添加一条记录
				var recordList = $("#fileTable");
				var index = recordList.find("tr").size()
				recordList.append(uploadHelper.newRecord(index));
				$("#img_"+index).click(function() {
					uploadHelper.delRecord(index);
				}); 
			});
		},
	addSaveBar : function(url) {
			var uploadHelper = this;
		//在工具栏添加一个"保存"按钮，当点击该按钮的时候，会通过ajax异步将文件上传的服务器，该属性会返回每个文件的上传状态
			var save  = '<dl id="ajaxSubmit" style="cursor:hand;"><dt class="save"></dt><dd>保存</dd></dl>';
			$(save).appendTo('#toolBar');
			$("#ajaxSubmit").click(function (){
		//上传所有的文件
			$(":file").each(function(){
					var value = $(this).val();
					if(value==""){
					}else{
						uploadHelper.ajaxUpload($(this).attr("id"),url);
					} 
				});
			});
	},
	addSaveAndReturnBar : function(fieldId,url){
		var uploadHelper = this;
		//添加一个”保存并返回“按钮，点击该按钮的时候，会把文件上传，同时返回上传的文件名，并将该文件名，
		//写回点指定的文本域中,一般用该方法进行单文件上传
		var saveAddClose  = '<dl id="ajaxSubmitAndClose" style="cursor:hand;"><dt class="save"></dt><dd>保存并返回</dd></dl>';
		$(saveAddClose).appendTo('#toolBar');
		$("#ajaxSubmitAndClose").click(function (){
	//		上传所有的文件
			$(":file").each(function(){
				var value = $(this).val();
				if(value==""){
				}else{
					uploadHelper.ajaxUpload($(this).attr("id"),url,fieldId);
					$("#fileUploadDiv").remove(); 
				} 
			});
		});
	},
	newRecord :function(index){
		//新添加一条记录
		var uploadHelper = this;
		var insert = '<tr class="tableData formData" id="file_'+index+'">';
		insert = insert + '<td><input type="file" class="text" name="upload" id="upload_'+index+'"></td>';
		insert = insert + '<td><img src="'+this.path+'/images/system/gtk-del.png" style="cursor:hand;" id="img_'+index+'"/></td>';
		insert = insert + '</tr>';
		return insert;
	},
	delRecord : function(index){
		//删除一条记录
		var tr = $("#file_"+index);
		tr.remove();
	},
	ajaxUpload : function(fileId,url,fieldId){
		//封装ajax上传组件
		$.ajaxFileUpload(
        {
            url:url,//用于文件上传的服务器端请求地址
            secureuri:false,//一般设置为false
            fileElementId:fileId,//文件上传空间的id属性  <input type="file" id="file" name="file" />
            dataType: 'json',//返回值类型 一般设置为json
            success: function (data, status)  //服务器成功响应处理函数
            {
        		fileName = data.fileName;
        		if(fieldId!=""){
        			$("#"+fieldId).val(fileName);
        		}
            },
            error: function (data, status, e)//服务器响应失败处理函数
            {
                alert(e);
            }
        }
    )
	},
	ajaxViewServer : function(fieldId,url){
		var uploadHelper = this;
		//在工具栏添加一个”浏览服务器“图标，在用户点击该按钮的时候会在系统界面显示当前服务器上面的图片
			var viewServerBar = '<dl id="viewServerBar" style="cursor:hand;"><dt class="view"></dt><dd>浏览服务器</dd></dl>';
			$(viewServerBar).appendTo('#toolBar');
			$("#viewServerBar").click(function (){
			var backBar = '<dl id="backBar" style="cursor:hand;"><dt class="cancel"></dt><dd>返回</dd></dl>';
			$("#viewServerBar").remove();
			$(backBar).appendTo('#toolBar');
			$("#backBar").click(function(){
				uploadHelper.init();
			});
			
			$.ajax({
				url:url,
				type:'post',
				dataType:'json',
				success:function(data){
					if(data!=null&&data!=""){
							var fileNames = data.fileName;
							if(fileNames==null){
								alert("指定目录无文件");
								return;
							}
							var array = fileNames.split("$@_@$");
							if(array.length>0){
							var viewServer = '<div class="viewServer" id="viewServer"></div>'
							$(viewServer).appendTo("#uploadContent");
							//原来的table去掉
							$("#fileTable").remove();
								for(var i=0;i<array.length;i++){
									 var name = array[i];
									 //获得文件的扩展名
									 var start = name.lastIndexOf("/");
									 var title = name.substring(start+1);
									 if(name!=""){
									 	viewServerItem ='<span><img src="'+name+'" style="cursor:hand;" id="viewImg_'+i+'" title="'+title+'"/></span>';
									 	$(viewServerItem).appendTo("#viewServer");
									 	$("#viewImg_"+i).click(function (){
										$("#"+fieldId).val($(this).attr("title"));
										$("#fileUploadDiv").remove();
									});
									 }
								}
							}else {
								alert("指定目录无文件");
						}
					 }else{
					 	alert("指定目录无文件");
					}
				}
			})
		});
	}
}